//
//  BCIPAddressHelper.m
//  BanChinaFramework
//
//  Created by Ann on 2024/3/11.
//

#import "BCIPAddressHelper.h"

@implementation BCIPAddressHelper

+ (void)getUserIPAddressWithCompletion:(IPCompletionHandler)completion {
    
    NSURL *url = [NSURL URLWithString:@"https://api.ipify.org?format=json"]; // 使用ipify提供的服务获取IP地址
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (error) {
            NSLog(@"获取ip地址错误: %@", error.localizedDescription);
            completion(nil);
        } else {
            NSError *jsonError;
            NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];
            if (jsonError) {
                NSLog(@"错误的格式: %@", jsonError.localizedDescription);
                if (completion) {
                    completion(nil);
                }
            } else {
                NSString *ipAddress = json[@"ip"];
                // 验证IP地址
                if (completion) {
                    completion(ipAddress);
                }
            }
        }
    }];
    
    [task resume];
}

+ (BOOL)isVPNIPAddress:(NSString *)ipAddress {
    // 检测IP地址是否属于VPN IP地址段的逻辑
    // 这里可以根据已知的VPN IP地址段进行判断
    // 如果IP地址属于VPN IP地址段，返回YES；否则返回NO
    // 示例中简单地假设以 "VPN" 开头的IP地址为VPN IP地址段
    if ([ipAddress hasPrefix:@"VPN"]) {
        return YES;
    } else {
        return NO;
    }
}

+ (void)interceptUserHandler:(void (^_Nullable)(BOOL success))completed {

    [self getUserIPAddressWithCompletion:^(NSString * _Nullable ipAddress) {
        // 模拟获取用户IP地址
        NSString *userIPAddress = ipAddress; // 这里应该根据实际情况获取用户真实IP地址
        
        // 判断用户IP是否在中国大陆范围内
        if ([userIPAddress hasPrefix:@"192.168"] || [userIPAddress hasPrefix:@"10"]) {
            // 在中国大陆内，需要拦截
            if (completed) {
                completed(YES);
            }
        } else {
            // 不在中国大陆内，不需要拦截
            if (completed) {
                completed(NO);
            }
        }
        
    }];
    
}
@end
